1. /* sdodvdbl.cpp by K.Tsuru */
  2. // function ID = 334 DRADIX
  3. /*****************
  4. SDouble class
  5. divide by double
  6. ******************/
  7. #ifndef SN_H
  8. #include "sn.h"
  9. #endif
  10. static const char* func = "SD/double";
  11. SDouble operator/(const SDouble& m, double n){
  12. if(n == 0.0) m.SetError(m.DIVIDED_BY_ZERO, func, 334);
  13. if(m.Sign(334) == 0) return SDZero(m);
  14. //This is not necessary because an access error occurs for SDecimal.
  15. // if(m.Type() != m.REAL) m.SetError(m.RADIX_ERR, func, 334);
  16. // must use XsDiv() for SDecimal class
  17. long N;
  18. double mt = (double)m.SlOpMaxValue();
  19. int d2l, e;
  20. d2l = doubleTolongExp(n, &N, &e, mt); //Try to convert into n = N*10^e.
  21. if(d2l){ //divide by N*10^e
  22. ulong p = (ulong)labs(N);
  23. SDouble r;
  24. if(p != 1uL) r = DsDiv(m, p); // r = m/|N|
  25. else r = m;
  26. //Maybe r becomes zero in the fixed point mode.
  27. if( r.Sign(334) ){
  28. r.SetSign(m.Sign()*Sgn(n));
  29. if(e) r.MultPow10(-e); // r = m*10^(-e)/|N| = m/|n|
  30. }
  31. return r;
  32. }
  33. return m*DReciprocal( SDouble(n) ); // add SDouble() since version 2.192
  34. }

sdodvdbl.cpp : last modifiled at 2014/05/21 21:50:13(1,080 bytes)
created at 2017/10/07 10:21:14
The creation time of this html file is 2017/10/07 10:30:03 (Sat Oct 07 10:30:03 2017).